package pageOne

//你可以假设每种输入只会对应一个答案。但是，数组中同一个元素在答案里不能重复出现。

//你可以按任意顺序返回答案。

//示例 1：
//
//输入：nums = [2,7,11,15], target = 9
//输出：[0,1]
//解释：因为 nums[0] + nums[1] == 9 ，返回 [0, 1] 。
//示例 2：
//
//输入：nums = [3,2,4], target = 6
//输出：[1,2]
//示例 3：
//
//输入：nums = [3,3], target = 6
//输出：[0,1]

// 哈希表方式
// 时间复杂度：O(1)
// 通过将目标元素与nums中所有元素做差运算的方式，然后将以 value值为key 和 下标key为value 方式放到一个map中
// 然后通过循环运算，判断运算的差值，在这个map中是否存在，然后返回对应的两个元素的下标key

// 两数之和 哈希表
func twoSum(nums []int, target int) []int {
	hashTable := map[int]int{}
	for i, x := range nums {
		if p, ok := hashTable[target-x]; ok {
			return []int{p, i}
		}
		hashTable[x] = i
	}
	return []int{}
}
